package com.example.ibsp_demo.mapper.content;

import com.example.ibsp_demo.pojo.entity.content.Content; // 替换为实际包路径
import com.example.ibsp_demo.pojo.entity.user.UserInterest;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface ContentMapper {
    Integer selectCtidByCtitle(@Param("ctitile") String ctitle);


    // 根据主键查询（内容详情）
    Content selectByCtid(Integer ctid);

    /*
    *
    * 通过全部关注者的id查询关注内容
    *
    * */
    List<Content> selectByAuids(@Param("followedIds") List<Integer> followedIds);

    /*
    *
    * 通过分区查询内容
    *
    * */
    List<Content> selectByPid(@Param("pid") Integer pid);

    // 分页查询所有内容（支持状态筛选）
    List<Content> selectByPage(Map<String, Object> params);

    // 插入内容（发布新内容）
    int insert(Content content);

    // 更新内容（编辑内容）
    int update(Content content);

    // 更新内容状态（审核/封禁/解封）
    int updateStatus(Map<String, Object> params);

    // 更新点赞数
    void updateLikeCount(@Param("ctid") Integer ctid, @Param("delta") int delta);
    //更新收藏
    void updateFavoriteCount(@Param("ctid") Integer ctid, @Param("delta") int delta);
    //更新评论
    void updateCommentCount(@Param("ctid") Integer ctid, @Param("delta") int delta);

    // 根据主键删除内容（需先删除关联的标签、互动、位置等记录）
    int deleteByCtid(Integer ctid);

    List<Content> selectBlogsByConditions(@Param("ctid") Integer ctid);
    void updateBlogStatus(@Param("ctid") Integer ctid, @Param("status") Integer status);



//    searchByKeyword(processedKeyword)
    /*
    * 通过关键词搜索
    * */
    List<Content> searchByKeyword(@Param("keyword") String keyword);
    /*
    *
    * 查询全部内容
    *
    * */
    List<Content> selectAll();
    /*
    *
    * 通过标签和内容数限制逐一查找
    *
    * */
    List<Content> selectByTags(List<UserInterest>userInterests, int topN);
    /*
    *
    * 随机查找内容
    *
    * */
    List<Content> getRandomContents(int limit);
    /*
    *
    * 以地区进行筛选
    *
    * */
    List<Content> selectByLocation(@Param("location") String location);

    // 分页获取标签相关的内容（排除已浏览）
    List<Content> selectByTagsPaged(
            @Param("interests") List<UserInterest> interests,
            @Param("excludeIds") List<Integer> excludeIds,
            @Param("offset") int offset,
            @Param("limit") int limit
    );

    // 分页获取分区内容（排除已浏览）
    List<Content> selectByPidPaged(
            @Param("pid") int pid,
            @Param("excludeIds") List<Integer> excludeIds,
            @Param("offset") int offset,
            @Param("limit") int limit
    );

    // 分页获取同城内容（排除已浏览）
    List<Content> selectByLocationPaged(
            @Param("location") String location,
            @Param("excludeIds") List<Integer> excludeIds,
            @Param("offset") int offset,
            @Param("limit") int limit
    );

    // 分页获取关注内容（排除已浏览）
    List<Content> selectByAuidsPaged(
            @Param("auids") List<Integer> auids,
            @Param("excludeIds") List<Integer> excludeIds,
            @Param("offset") int offset,
            @Param("limit") int limit
    );

    // 获取随机内容（排除指定ID）
    List<Content> getRandomContentsExcluding(
            @Param("excludeIds") List<Integer> excludeIds,
            @Param("limit") int limit
    );
    /**
     * 通过关键词搜索内容标题
     * @param keyword 搜索关键词
     * @return 匹配的标题列表
     */
    List<String> searchTitlesByKeyword(@Param("keyword") String keyword);
    List<Content> findByAuid(Integer auid);
}